# project_root/schedules.py
"""
专门用于配置固定定时任务的文件
由 qcluster 进程加载，完全独立于 uwsgi
"""

from django_q.models import Schedule
from django.utils import timezone
from base_utils.logger import scheduler_logger as logger

# 定义所有固定定时任务
FIXED_SCHEDULES = [
    {
        'name': '每日数据同步 - 凌晨2点',
        'func': 'q_scheduler.scheduler_tasks.test_run',
        'schedule_type': Schedule.CRON,
        'cron': '0 2 * * *',
    },
    {
        'name': '每分钟缓存清理',
        'func': 'q_scheduler.scheduler_tasks.test_run',
        'schedule_type': Schedule.MINUTES,
        'minutes': 1,
    },
    {
        'name': '每周报告生成 - 周一早上6点',
        'func': 'q_scheduler.scheduler_tasks.test_run',
        'schedule_type': Schedule.CRON,
        'cron': '0 6 * * 1',
    },
    {
        'name': '每30分钟数据检查',
        'func': 'q_scheduler.scheduler_tasks.test_run',
        'schedule_type': Schedule.MINUTES,
        'minutes': 30,
    },
    {
        'name': '每日重命名wusgi.log文件名-凌晨2点',
        'func': 'q_scheduler.scheduler_tasks.uwsgi_log_files',
        'schedule_type': Schedule.CRON,
        'cron': '0 2 * * *',
    },
]



def register_fixed_schedules():
    """
    注册固定的周期性任务，存在则更新，不存在则创建。
    """
    for task in FIXED_SCHEDULES:
        try:
            obj, created = Schedule.objects.update_or_create(
                name=task["name"],
                defaults={
                    "func": task["func"],
                    "schedule_type": task["schedule_type"],
                    "minutes": task.get("minutes"),
                    "cron": task.get("cron"),
                    "repeats": -1,  # 无限重复
                    "next_run": timezone.now(),  # 立即生效
                },
            )
            if created:
                logger.info(f"[Django-Q] 已创建定时任务: {task['name']}")
            else:
                logger.info(f"[Django-Q] 已更新定时任务: {task['name']}")
        except Exception as e:
            logger.error(f"[Django-Q] 注册定时任务 {task['name']} 失败: {e}")